iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0

Day 26 Nested 系列攻擊手法的原理簡介

本文章的內容僅限學術及研究用途,請勿進行任何違法行為,否則後果自負。

M1 卡在進行第一次認證之後到卡片回到待命狀態之前,與讀卡機的所有通訊資料全部都會被 keystream 加密。但因為 Crypto-1 本身設計上的缺陷,在某些情況下會洩漏 keystream 的部分資訊,讓我們有機會可以還原 keystream,進而推算出金鑰。

Parity bit 的漏洞

ISO 14443A 的規範中要求使用 parity bit 來驗證資料傳輸的正確性,但 M1 卡在加密通訊資料後,會重複使用一小部分的 keystream 來加密 parity bit,導致 keystream 洩漏。Hardnested 攻擊就是利用這個資訊來推算部分 keystream 的資訊。

M1 卡第二次認證的協定

在 M1 卡進行第一次認證之後,如果想要更換認證的區段或金鑰時,會進行新的一輪三步驟認證。但與第一次不同的是,卡片挑戰 nt 並不會明碼傳送,而是會使用新的卡片金鑰來產生 keystream1 並與卡片挑戰 nt 進行 XOR 運算,然後再傳送給讀卡機。如果在 nt 已知的情況下,就能夠推算出 keystream0,進而逆推出卡片金鑰。

  • nested: 可透過 16 位元的線性反饋移位暫存器 (LFSR) 的特性及 parity bit 來推算出卡片挑戰 nt。
  • static nested: 使用某幾組固定的卡片挑戰 nt,可透過連續兩次認證已知的卡片金鑰來蒐集。
  • static encrypt nested: 使用某幾組固定的卡片挑戰 nt,可透過多個 FUDAN 專屬的漏洞蒐集。
  • hardnested: 單純透過 parity bit 來推算出 keystream,需要較長時間。

使用 Proxmark3 攔截的通訊資料範例

首先,均民先寫一段程式來模擬第二次認證,然後使用 Proxmark3 來攔截通訊的資料,攔截的資料如下:

第一段是喚醒卡片、防碰撞以及選擇卡片:

接下來是第一次認證:

第一次認證成功後,讀卡機傳送 60 07 CRC 給卡片,這段資料會用第一次認證的 keystream 進行加密,其中 0x60 代表對 Key A 進行認證,0x07 代表區塊 7:

接下來卡片會傳送卡片挑戰 nt 給讀卡機,這段資料會使用第二次認證的 keystream0 進行加密:

然後讀卡機會產生一個讀卡機挑戰 nr 並與第二次認證的 keystream1 進行 XOR 運算,並使用卡片挑戰 nt 產生 ar 與第二次認證的 keystream2 進行 XOR 運算之後一起傳送給卡片:

最後,卡片會驗證 ar 的正確性,如果正確就使用讀卡機挑戰 nr 產生 at 與第二次認證的 keystream3 進行 XOR 運算之後傳送給讀卡機:


上一篇
Day 25 M1 卡第一次認證的協定及範例
下一篇
Day 27 Proxmark3 的自動攻擊指令
系列文
免安裝!一起用 JS 來控制開源的 NFC 讀卡機變色龍吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言